package Day11.instance_of;
/*
  instanceof运算符
    格式：
       引用变量名 instanceof 类名或接口名
 */

import Day03.D;

interface JD {

}

abstract class Animal {

}

class Dog extends Animal implements JD {

}

class Sheep extends Animal {

}


public class Demo {
    public static void main(String[] args) {
        //1.普通类
        Dog dog = new Dog();
        boolean b= dog instanceof Dog;//instanceof会去检测引用变量指向的对象能否赋值给右边类型,如果可以赋值，结果为真，否则为false
                                       //Dog d=new Dog()
        System.out.println(b);

        //2.抽象类
        Animal a = new Dog();
        System.out.println(a instanceof Animal);//a引用指向的对象能否赋值给Dog类型
                                                //Dog d=new Dog();可以赋值，所以为true
        System.out.println(a instanceof Dog);   //a引用指向的对象能否赋值给Animal类型
                                                //Animal temp=new Dog();可以赋值，结果为true

        //3.接口
        JD j = new Dog();
        System.out.println(j instanceof Dog);//j引用指向的对象能否赋值给Dog类型
                                             //Dog d=new Dog();可以赋值，所以为true
        System.out.println(j instanceof JD);//j引用指向的对象能否赋值给JD类型
                                            //JD temp=new Dog();可以赋值，所以为true
        //4.其他类
        Animal a2 = new Sheep();
        System.out.println(a2 instanceof Dog);//a2引用指向的对象能否赋值给Dog类型
                                              //new Dog()=new Sheep//结果为false
    }
}
